package com.ykc.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * @author Ykc
 * @date 2021年05月25日 16:06
 * @description 属性文件工具类
 */
public class PropertiesUtils {

    private static final Logger LOGGER = LoggerFactory.getLogger(PropertiesUtils.class);

    /*
     * @author Ykc
     * @date 2021/5/25 16:13
     * @param fileName
     * @return java.util.Properties
     * @description 加载属性文件
     */
    public static Properties loadProps(String fileName){
        Properties props=null;
        InputStream inputStream=null;

        try {
            //从ClassUtil获取ContextClassLoader用于读取Config类文件
            inputStream=ClassUtil.getContextClassLoader().getResourceAsStream(fileName);
            if (inputStream==null){
                throw new FileNotFoundException(fileName + " file is not found");
            }
            props=new Properties();
            props.load(inputStream);
        } catch (IOException e) {
            LOGGER.error("load properties file failure", e);
        }finally {
            if (inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    LOGGER.error("close input stream failure", e);
                }
            }
        }
        return props;
    }

    //获取String类型的属性值
    public static String getString(Properties props,String key){
        return getString(props, key, "");
    }
    public static String getString(Properties props, String key, String defaultValue) {
        String value = defaultValue;
        if (props.containsKey(key)) {
            value = props.getProperty(key);
        }
        return value;
    }

    /**
     * 获取 int 类型的属性值（默认值为 0）
     */
    public static int getInt(Properties props, String key) {
        return getInt(props, key, 0);
    }
    public static int getInt(Properties props, String key, int defaultValue) {
        int value = defaultValue;
        if (props.containsKey(key)) {
            value = Integer.parseInt(props.getProperty(key));
        }
        return value;
    }

    /**
     * 获取 boolean 类型属性（默认值为 false）
     */
    public static boolean getBoolean(Properties props, String key) {
        return getBoolean(props, key, false);
    }
    public static boolean getBoolean(Properties props, String key, boolean defaultValue) {
        boolean value = defaultValue;
        if (props.containsKey(key)) {
            value = Boolean.parseBoolean(props.getProperty(key));
        }
        return value;
    }
}
